Optional এবং Streams API এর সাথে Integration

Java Technologies - জাভা ইউটিল.প্যাকেজ (Java.util Package) - ava.util.Optional
239

Optional এবং Streams API Java 8-এ একটি নতুন ও শক্তিশালী বৈশিষ্ট্য হিসেবে পরিচিত হয়েছে, যা নাল চেকিং এবং ডেটা প্রসেসিংকে আরও কার্যকর এবং সহজ করে তোলে। Optional মূলত একটি ক্লাস যা একটি মানের উপস্থিতি বা অনুপস্থিতি নির্দেশ করে এবং এটি NullPointerException প্রতিরোধে সাহায্য করে। অন্যদিকে, Streams API ডেটাকে functional style এ প্রসেস করার জন্য ব্যবহৃত হয় এবং parallel processing সমর্থন করে।

Optional ক্লাস

Optional একটি কন্টেইনার অবজেক্ট যা একটি মান ধারণ করতে পারে বা ধারণ নাও করতে পারে (অর্থাৎ null)। এটি null মানগুলির কারণে NullPointerException প্রতিরোধ করার জন্য ডিজাইন করা হয়েছে।

Optional এর মূল বৈশিষ্ট্য:

  1. Value Presence Check: Optional এর মাধ্যমে আপনি মানের উপস্থিতি যাচাই করতে পারেন, যার ফলে আপনি null চেকিং সহজভাবে করতে পারবেন।
  2. Avoid NullPointerException: Optional আপনাকে NullPointerException প্রতিরোধে সাহায্য করে, কারণ আপনি একটি Optional মানের উপস্থিতি যাচাই না করে সরাসরি কাজ করতে পারবেন না।
  3. Functional Programming: Optional আপনার কোডে ফাংশনাল স্টাইলের প্রোগ্রামিং প্রচার করে, যেমন map(), filter(), ifPresent() ইত্যাদি।

Optional এর সাধারণ মেথডসমূহ:

  • isPresent(): যাচাই করে যে Optional অবজেক্টে কোনো মান রয়েছে কি না।
  • get(): Optional অবজেক্টের মান রিটার্ন করে। তবে, যদি মান না থাকে, তাহলে NoSuchElementException থ্রো করবে।
  • orElse(): যদি মান থাকে তবে সেটি রিটার্ন করবে, আর যদি না থাকে তবে একটি ডিফল্ট মান রিটার্ন করবে।
  • ifPresent(): মান উপস্থিত থাকলে একটি অপারেশন সম্পাদন করবে।

Streams API এবং Optional এর Integration

Streams API ডেটা প্রসেসিং এর জন্য একটি ফাংশনাল ইন্টারফেস প্রদান করে, যা collection এর উপাদানগুলোকে প্রসেস করতে সহজ এবং কার্যকরী করে তোলে। Optional এবং Streams API একসাথে ব্যবহৃত হলে, আপনি null চেকিং ছাড়াই ডেটা স্ট্রিমের উপর কাজ করতে পারবেন এবং আরও কার্যকরভাবে ফিল্টার, ম্যাপ, রিডুস অপারেশন করতে পারবেন।

Streams API Overview:

Streams API আপনাকে লিনিয়ার ডেটা প্রসেস করতে সহায়তা করে, যেখানে আপনি ফিল্টার, ম্যাপ, রিডুস, এবং আরো অনেক কাজ করতে পারেন, যা functional style এ করা সম্ভব।


Optional এবং Streams API এর সাথে Integration এর উদাহরণ

Example 1: Optional and Streams Integration

ধরা যাক, আপনার কাছে একটি List রয়েছে, যার মধ্যে কিছু Optional উপাদান থাকতে পারে, এবং আপনি শুধুমাত্র তাদেরই প্রসেস করতে চান যেগুলিতে মান রয়েছে।

import java.util.*;
import java.util.stream.*;

public class OptionalWithStreamsExample {
    public static void main(String[] args) {
        // একটি List তৈরি করা যেখানে Optional মান রয়েছে
        List<Optional<String>> list = Arrays.asList(
            Optional.of("Java"),
            Optional.empty(),
            Optional.of("Python"),
            Optional.empty(),
            Optional.of("JavaScript")
        );

        // Stream API ব্যবহার করে Optional উপাদান ফিল্টার করা, যেগুলির মান উপস্থিত রয়েছে
        list.stream()
            .filter(Optional::isPresent) // Only keep Optionals that are not empty
            .map(Optional::get)         // Get the value from Optional
            .forEach(System.out::println); // Print the non-empty Optional values
    }
}

Output:

Java
Python
JavaScript

ব্যাখ্যা:

  • filter(Optional::isPresent): Optional এর মধ্যে মান present কি না তা যাচাই করে।
  • map(Optional::get): Optional থেকে মান বের করে।
  • forEach(System.out::println): উপস্থিত মানগুলিকে কনসোল আউটপুটে প্রিন্ট করে।

Example 2: Using Optional with Streams API's orElse()

এখানে আমরা দেখব কিভাবে Optional এবং Streams API ব্যবহার করে ডেটা প্রসেসিংয়ে orElse() মেথডটি ব্যবহার করা যায়।

import java.util.*;
import java.util.stream.*;

public class OptionalWithStreamsOrElseExample {
    public static void main(String[] args) {
        List<Optional<String>> list = Arrays.asList(
            Optional.of("Java"),
            Optional.empty(),
            Optional.of("Python"),
            Optional.empty(),
            Optional.of("JavaScript")
        );

        // Optional ব্যবহার করে স্ট্রিমের উপাদানগুলি প্রসেস করা
        List<String> result = list.stream()
            .map(opt -> opt.orElse("Unknown")) // যদি Optional.empty হয়, তাহলে "Unknown" ব্যবহার হবে
            .collect(Collectors.toList());

        System.out.println(result);
    }
}

Output:

[Java, Unknown, Python, Unknown, JavaScript]

ব্যাখ্যা:

  • orElse("Unknown"): এটি Optional অবজেক্টের মধ্যে মান না থাকলে "Unknown" প্রদান করে।

Example 3: Combining Optional and flatMap() with Streams

এখানে আমরা দেখব কিভাবে flatMap() ব্যবহার করে Optional এর সাথে Streams API একত্রে কাজ করে।

import java.util.*;
import java.util.stream.*;

public class OptionalFlatMapExample {
    public static void main(String[] args) {
        // List of Optional Strings
        List<Optional<String>> list = Arrays.asList(
            Optional.of("Java"),
            Optional.empty(),
            Optional.of("Python"),
            Optional.of("JavaScript")
        );

        // `flatMap` ব্যবহার করে Optional থেকে String রিটার্ন করা
        List<String> result = list.stream()
            .flatMap(opt -> opt.map(Stream::of).orElseGet(Stream::empty)) // Convert Optional to Stream
            .collect(Collectors.toList());

        System.out.println(result);
    }
}

Output:

[Java, Python, JavaScript]

ব্যাখ্যা:

  • flatMap() ব্যবহার করা হয়েছে যাতে Optional থেকে Stream তৈরি করা যায়। যদি Optional মান ধারণ করে, তবে Stream::of এর মাধ্যমে স্ট্রিম তৈরি করা হয়, আর যদি না থাকে তবে Stream::empty দিয়ে খালি স্ট্রিম রিটার্ন করা হয়।

  • Optional এবং Streams API একসাথে ব্যবহার করলে আপনি null চেকিং ছাড়াই functional programming স্টাইলের মাধ্যমে ডেটা প্রসেসিং করতে পারবেন।
  • Optional মূলত null মান প্রতিরোধে সহায়তা করে, এবং Streams API ডেটা প্রসেসিং সহজ এবং কার্যকরী করে তোলে।
  • flatMap(), map(), এবং orElse() এর মতো মেথডের মাধ্যমে Optional এবং Streams API একসাথে ব্যবহৃত হতে পারে, যা আরও উন্নত এবং নিরাপদ কোড লেখার সুযোগ তৈরি করে।

এই দুইয়ের শক্তিশালী একত্রিত ব্যবহার আপনাকে আরও সঠিক, পরিষ্কার এবং কর্মক্ষম Java কোড তৈরি করতে সহায়তা করবে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...